package config

// 定义一个顶级结构体
type Config struct {
	Install   InstallCfg   `yaml:"install"`   // 安装配置
	Uninstall UninstallCfg `yaml:"uninstall"` // 卸载配置
	Build     BuildCfg     `yaml:"build"`     // 构建配置
	GitInit   GitInitCfg   `yaml:"gitinit"`   // git初始化配置
	Pack      PackCfg      `yaml:"pack"`      // makeSelf配置
}

// 用于存储install配置的结构体
type InstallCfg struct {
	Name             string            `yaml:"name"`               // 程序名称
	Version          string            `yaml:"version"`            // 程序版本
	Platform         Platform          `yaml:"platform"`           // 限制平台
	InstallItems     []InstallItem     `yaml:"install_items"`      // 用于分发的文件或目录列表
	RemoveItems      []string          `yaml:"remove_items"`       // 需要删除的文件或目录列表
	BackupItems      []BackupItem      `yaml:"backup_items"`       // 需要备份的文件或目录列表
	StartInstallCmds [][]string        `yaml:"start_install_cmds"` // 安装前执行的命令
	EndInstallCmds   [][]string        `yaml:"end_install_cmds"`   // 安装后执行的命令
	Environment      map[string]string `yaml:"environment"`        // 环境变量
}

// Platform 定义平台限制的结构体
type Platform struct {
	OS   []string `yaml:"os"`   // 限制操作系统
	Arch []string `yaml:"arch"` // 限制架构
}

// InstallItem 定义安装项的结构体
type InstallItem struct {
	Src string `yaml:"src"` // 源文件路径
	Dst string `yaml:"dst"` // 目标路径
}

// BackupItem 定义备份项的结构体
type BackupItem struct {
	Src string `yaml:"src"` // 源文件路径
	Dst string `yaml:"dst"` // 目标备份路径
}

// 用于存储uninstall配置的结构体
type UninstallCfg struct {
	Name            string     `yaml:"name"`              // 程序名称
	Version         string     `yaml:"version"`           // 程序版本
	UninstallItems  []string   `yaml:"uninstall_items"`   // 需要删除的文件或目录
	StopServiceCmds [][]string `yaml:"stop_service_cmds"` // 停止或禁用服务的命令
	CleanupCmds     [][]string `yaml:"cleanup_cmds"`      // 清理操作的命令
	Platform        Platform   `yaml:"platform"`          // 限制平台
}

// 用于存储build配置的结构体
type BuildCfg struct {
	Name        string            `yaml:"name"`        // 构建的项目名称
	Version     string            `yaml:"version"`     // 构建的版本号
	Environment map[string]string `yaml:"environment"` // 构建环境变量
	Platform    Platform          `yaml:"platform"`    // 限制平台
	MainPath    string            `yaml:"main_path"`   // 项目根目录
	OutputDir   string            `yaml:"output_dir"`  // 输出目录
	EntryPath   string            `yaml:"entry_path"`  // 入口文件路径
	Targets     []BuildTarget     `yaml:"targets"`     // 构建目标
	GORoot      string            `yaml:"go_root"`     // GOROOT路径
}

// 用于存储构建目标的结构体
type BuildTarget struct {
	OS         string `yaml:"os"`          // 目标操作系统
	Arch       string `yaml:"arch"`        // 目标架构
	OutputName string `yaml:"output_name"` // 输出文件名
}

// 用于存储git初始化配置的结构体, gitinit顶级键
type GitInitCfg struct {
	ProjectName   string        `yaml:"project_name"`   // 项目名称
	ProjectPath   string        `yaml:"project_path"`   // 项目路径
	InitialCommit InitialCommit `yaml:"initial_commit"` // 初次提交配置
	GitConfig     GitConfig     `yaml:"git_config"`     // git配置
	RemoteConfig  RemoteConfig  `yaml:"remote_config"`  // 远程仓库配置
}

// 存储用于初次提交文件的结构体
type InitialCommit struct {
	Message  string   `yaml:"message"`   // 提交信息
	AllFiles bool     `yaml:"all_files"` // 是否提交所有文件
	Files    []string `yaml:"files"`     // 需要提交的文件列表
}

// 存储git配置的结构体
type GitConfig struct {
	SetGitConfig      bool   `yaml:"set_git_config"`      // 是否设置git配置
	GitConfigScope    string `yaml:"git_config_scope"`    // git配置作用域[global,local,system]
	UserName          string `yaml:"user_name"`           // 用户名
	UserEmail         string `yaml:"user_email"`          // 用户邮箱
	InitDefaultBranch string `yaml:"init_default_branch"` // 默认分支名称
	ColorUI           bool   `yaml:"color_ui"`            // 是否启用颜色UI
	ColorDiff         bool   `yaml:"color_diff"`          // 是否启用颜色差异
	ColorStatus       bool   `yaml:"color_status"`        // 是否启用颜色状态
	PushDefault       string `yaml:"push_default"`        // 默认推送行为 [simple, matching, upstream]
	CoreAutoCRLF      bool   `yaml:"core_auto_crlf"`      // 是否自动转换换行符 [true,false]
}

// 存储远程仓库配置的结构体
type RemoteConfig struct {
	RemoteName      string `yaml:"remote_name"`       // 远程仓库名称
	RemoteBranch    string `yaml:"remote_branch"`     // 远程仓库分支
	RemoteURL       string `yaml:"remote_url"`        // 远程仓库URL
	FetchBeforePush bool   `yaml:"fetch_before_push"` // 推送前是否拉取远程仓库 [true,false]
	PushInitial     bool   `yaml:"push_initial"`      // 是否推送初始提交 [true,false]
}

// 用于存储pack配置的结构体
type PackCfg struct {
	NoTemp        bool   `yaml:"no_temp"`         // 是否不使用临时目录
	Dir           string `yaml:"dir"`             // 打包目录
	OutputRunName string `yaml:"output_run_name"` // 输出运行包名
	UnZipMsg      string `yaml:"unzip_msg"`       // 解压提示信息
	ScriptPath    string `yaml:"script_path"`     // 脚本路径
	Params        string `yaml:"params"`          // 脚本参数
}
